package com.major.dawn.leetCode.array;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

//  看了一下题解主流的两种思路：
// 排序 + 双指针  （n*log(n) + n ）
// 第二个便是我这种，通过唯一hashMap的映射实现 （n）,哈哈  我现在的思路确实越来越广了
public class PairSums {

    public List<List<Integer>> pairSums(int[] nums, int target) {

        List<List<Integer>> lists = new ArrayList<>();
        int length = nums.length;
        if (length < 2) {
            return lists;
        }

        Map<Integer, Integer> integerMap = new HashMap<>();
        for (int num : nums) {
            if (integerMap.containsKey(num)) {
                List<Integer> integers = new ArrayList<>();
                integers.add(num);
                integers.add(target - num);
                lists.add(integers);

                Integer value = integerMap.get(num);
                value--;
                if (value == 0) {
                    integerMap.remove(num);
                }else {
                    integerMap.put(num, value);
                }

            } else {
                int key = target - num;
                Integer integer = integerMap.get(key);
                if (integer == null) {
                    integer = 0;
                }
                integer++;
                integerMap.put(key, integer);
            }
        }

        return lists;
    }


    public static void main(String[] args) {
        PairSums pairSums = new PairSums();
        List<List<Integer>> lists = pairSums.pairSums(new int[]{6, 1, 7, 6, 5, 1, 0, 0, 5, -1}, 6);
        System.out.println(lists);
    }
}
